import ApiClient from '@/api/apiClient';

import type { RequestBody } from 'alova';

/**
 * 告警记录实体
 */
export interface AlarmRecord {
  /**
   * 告警处理时间
   */
  alarmHandleTime?: string;
  /**
   * 告警设备code集合
   */
  alramDevices?: string;
  /**
   * 告警触发时间
   */
  createTime?: string;
  /**
   * 处理结果
   */
  handleResult?: string;
  /**
   * 告警id
   */
  id?: number;
  /**
   * 告警级别0:普通 1:严重 2紧急
   */
  level?: number;
  /**
   * 告警规则名称
   */
  ruleName?: string;
  /**
   * 规则描述
   */
  ruleRemark?: string;
  /**
   * 告警源数据
   */
  sourceData?: string;
  /**
   * 告警状态0：未处理 1:已处理
   */
  status?: number;
  /**
   * 告警类型 1:设备告警
   */
  type?: number;
  [property: string]: any;
}

/**
 * BizAlarmRecord对象
 */
export interface AlarmItem {
  /**
   * 告警处理时间
   */
  alarmHandleTime?: string;
  /**
   * 告警设备编码集合
   */
  alramDevices?: string;
  /**
   * 创建人
   */
  createBy?: string;
  /**
   * 创建人id
   */
  createId?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 处理结果
   */
  handleResult?: string;
  /**
   * 主键
   */
  id?: number;
  /**
   * 是否逻辑删除，1是0否
   */
  isDelete?: number;
  /**
   * 告警级别0:普通 1:严重 2紧急
   */
  level?: number;
  /**
   * 规则id
   */
  ruleId?: number;
  /**
   * 告警规则名称
   */
  ruleName?: string;
  /**
   * 规则描述
   */
  ruleRemark?: string;
  /**
   * 告警源数据
   */
  sourceData?: string;
  /**
   * 告警状态0：未处理 1:已处理
   */
  status?: number;
  /**
   * 租户编码
   */
  tenantCode?: string;
  /**
   * 告警类型 1:设备告警
   */
  type?: number;
  /**
   * 修改人
   */
  updateBy?: string;
  /**
   * 修改人id
   */
  updateId?: number;
  /**
   * 更新时间
   */
  updateTime?: Date;
  /**
   * 乐观锁版本号
   */
  version?: number;
  [property: string]: any;
}

/**
 * 告警记录统计信息
 */
export interface AlarmRecordStatistics {
  /**
   * 告警总数
   */
  alarmCount?: number;
  /**
   * 重要告警数
   */
  importantCount?: number;
  /**
   * 未处理告警数
   */
  noHandleCount?: number;
  /**
   * 普通告警数
   */
  ordinaryCount?: number;
  /**
   * 紧急告警数
   */
  urgentCount?: number;
  [property: string]: any;
}

/**
 * BizAlarmContact对象
 */
export interface BizAlarmContact {
  /**
   * 创建人
   */
  createBy?: string;
  /**
   * 创建人id
   */
  createId?: number;
  /**
   * 创建时间
   */
  createTime?: string;
  /**
   * 邮箱
   */
  email?: string;
  /**
   * 主键
   */
  id?: number;
  /**
   * 是否逻辑删除，1是0否
   */
  isDelete?: number;
  /**
   * 姓名
   */
  name?: string;
  /**
   * 组织
   */
  orgName?: string;
  /**
   * 电话
   */
  phone?: string;
  /**
   * 备注
   */
  remark?: string;
  /**
   * 租户编码
   */
  tenantCode?: string;
  /**
   * 修改人
   */
  updateBy?: string;
  /**
   * 修改人id
   */
  updateId?: number;
  /**
   * 更新时间
   */
  updateTime?: string;
  /**
   * 乐观锁版本号
   */
  version?: number;
  [property: string]: any;
}

/** 告警列表 */
export const operationAlarmListApi = (data: RequestBody) => {
  return ApiClient.Post<API.ListType<AlarmRecord>>('/manager/alarm/record/page', data, {
    meta: { auth: true },
  });
};
/** 处理告警 */
export const operationAlarmHandleApi = (
  data: Merge<RequestBody, { id: number; handleResult: string }>
) => {
  return ApiClient.Post(`/manager/alarm/record/handleAlarm`, data, {
    meta: { auth: true },
  });
};

/** 获取告警详情 */
export const operationAlarmDetailApi = (data: { id: number }) => {
  return ApiClient.Get<AlarmItem>(`/manager/alarm/record/get/${data.id}`, {
    meta: { auth: true },
  });
};

/** 告警信息统计 */
export const operationAlarmStatisticsApi = () => {
  return ApiClient.Get<AlarmRecordStatistics>(`/manager/alarm/record/alarmCount`, {
    meta: { auth: true },
  });
};

/** 告警联系人列表 */
export const operationAlarmContactListApi = (data: RequestBody) => {
  return ApiClient.Get<API.ListType<BizAlarmContact>>('/manager/alarm/record/alarmContactList', {
    params: data,
    meta: { auth: true },
  });
};

/** 新增修改告警联系人 */
export const operationAlarmContactSaveApi = (data: RequestBody) => {
  return ApiClient.Post('/manager/alarm/record/addAlarmContact', data, {
    meta: { auth: true },
  });
};

/** 删除告警联系人 */
export const operationAlarmContactDeleteApi = (data: { id: string }) => {
  return ApiClient.Get(`/manager/alarm/record/delAlarmContact/${data.id}`, {
    meta: { auth: true },
  });
};
